/*
Q:什么是互斥锁（Mutex）？
A:互斥锁是一种并发编程中常用的同步机制，用于保护共享资源的访问
在Go语言中，可以使用sync包中的Mutex类型来实现互斥锁
通过调用Lock方法来获取锁，保护共享资源的访问，然后在使用完共享资源以后调用Unlock方法释放锁
*/
package main

import (
	"fmt"
	"sync"
)

var counter int
var mutex sync.Mutex

func main() {
	var wg sync.WaitGroup
	for i := 0; i < 1000; i++ {
		wg.Add(1)
		go func() {
			defer wg.Done()
			increment()
		}()
	}
	wg.Wait()

	fmt.Println("Counter:", counter)
}

func increment() {
	mutex.Lock()
	counter++
	mutex.Unlock()
}

/*
在上述代码中，我们定义了一个全局变量counter和一个sync.Mutex类型的互斥锁mutex。
在increment函数中，我们使用mutex.Lock()获取锁，对counter进行递增操作，然后使用mutex.Unlock()释放锁。

通过使用互斥锁，我们确保了对counter的并发访问的安全性。
*/
